var consonanti =  "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ";
var numeri = "0123456789"; 
var arrCodMesi=Array(
		"",
		"A",
		"B",
		"C",
		"D",
		"E",
		"H",
		"L",
		"M",
		"P",
		"R",
		"S",
		"T"  );

function CalcolaCodiceFiscale(frm,field)
	{

	with (frm) { 
		 Cognome=cognome.value;
		 Nome=nome.value 
		 GiornoNascita=dataNascita.value.substr(0,2);
		 MeseNascita= parseInt(dataNascita.value.substr(3,2),10);
		 MeseNascita=arrCodMesi[MeseNascita];

		 AnnoNascita=dataNascita.value.substr(6,4);

 		 Sesso=sesso.value;

		 Comune=codiceLuogoNascita.value;

	}



   if (Cognome != "" && Nome != "" && Comune != "" && frm.dataNascita.value !="") {
   		
      ComuneCalcolato=Comune;
      rc = CalcolaCognome(Cognome);
      rn = CalcolaNome(Nome)
      rN = CalcolaNascita(GiornoNascita, MeseNascita, AnnoNascita, Sesso);

      var cf = rc+rn+rN+ComuneCalcolato;

      cf += CalcolaK(rc+rn+rN+ComuneCalcolato);
       
	  if (ComuneCalcolato != -1){
		  field.value = cf; 
	  } else
		  field.value = "";
   }
}

function CalcolaCognome(Cognome)
{
   var code = "";
   code = GetConsonanti(Cognome);
   if (code.length >= 3)
      code = code.substring(0, 3);
   else
   {
      code += GetVocali(Cognome).substring(0, 3 - code.length)
      if (code.length < 3)
         for (i = code.length; i < 3; i++)
            code += "X";
   }
   return code;
}

function CalcolaNome(Nome)
{
   var code = "";
   cons = GetConsonanti(Nome);
   if (cons.length > 3)
      code = cons.substring(0, 1) + cons.substring(2, 3) + cons.substring(3, 4);
   else if (cons.length == 3)
      code = cons;
   else
   {
      code = cons + GetVocali(Nome).substring(0, 3 - cons.length);
      if (code.length < 3)
         for (i = code.length; i < 3; i++)
            code += "X";
   }
   return code;
}

function GetConsonanti(Stringa)
{
   var cns = "";
   for (i = 0; i < Stringa.length; i++)
      if (consonanti.indexOf(Stringa.substring(i, i + 1)) != -1)
         cns += Stringa.substring(i, i + 1);
   return cns.toUpperCase();
}

function GetVocali(Stringa)
{
   var voc = "";
   for (i = 0; i < Stringa.length; i++)
      if (consonanti.indexOf(Stringa.substring(i, i + 1)) == -1 && Stringa.substring(i, i + 1) != " ")
         voc += Stringa.substring(i, i + 1);
   return voc.toUpperCase();
}

function CalcolaNascita(Giorno, Mese, Anno, Sesso)
{
   var code = "";
   code += Anno.substring(2, 4) + Mese;

   if (Sesso == "S"){return "";}

   if (Sesso == "M")
      code += Giorno;
   else
      code += parseInt(40,10) + parseInt(Giorno,10);
   return code;
}


function CalcolaK(Stringa)
{
   var somma = 0, k;
   var arrPari = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
   var arrDispari = new Array(
      Array(0,1),
      Array(1,0),
      Array(2,5),
      Array(3,7),
      Array(4,9),
      Array(5,13),
      Array(6,15),
      Array(7,17),
      Array(8,19),
      Array(9,21),
      Array("A",1),
      Array("B",0),
      Array("C",5),
      Array("D",7),
      Array("E",9),
      Array("F",13),
      Array("G",15),
      Array("H",17),
      Array("I",19),
      Array("J",21),
      Array("K",2),
      Array("L",4),
      Array("M",18),
      Array("N",20),
      Array("O",11),
      Array("P",3),
      Array("Q",6),
      Array("R",8),
      Array("S",12),
      Array("T",14),
      Array("U",16),
      Array("V",10),
      Array("W",22),
      Array("X",25),
      Array("Y",24),
      Array("Z",23)
   );
   for (i = 0; i < Stringa.length; i += 2)
   {
      for (j = 0; j < arrDispari.length; j++)
      {
         if (Stringa.substring(i, i + 1).toUpperCase() == arrDispari[j][0])
         {
            somma += parseInt(arrDispari[j][1],10);
            break;
         }
      }
   }
   for (i = 1; i < Stringa.length; i += 2)
   {
      if (isNaN(Stringa.substring(i, i + 1)))
         somma += parseInt(arrPari.indexOf(Stringa.substring(i, i + 1)),10);
      else
         somma += parseInt(Stringa.substring(i, i + 1),10);
   }
   k = somma % 26;
   k = arrPari.charAt(k);
   return k;
}
